lorom ; Using Low Rom, split ROM into 32k chunks
org $008000 ; START HERE
fillbyte $00 : fill 256000 ; Fill 256,000 bytes to the rom (for copiers)
incsrc heather.asm ; Include IVT - heather
org $008000
cleartable ; Clear the ASCII table built in the assembler
table my_standard.tbl,ltr ; Load my own table.(make your own table)
;----------------------------DEMO-START---------------------------------------
start:
sei ; Disable interrupts
clc ; Clear carry
xce ; Switch to NATIVE mode
phk ; Push program bank on stack
plb ; Pull STACK ON DATA BANK
rep #$30 ; Reset Processor status bits
lda #$0000 ; Make DP = $0000
tcd
; INITIATE ;
sep #$20 ; X,Y 16,A are 8 bit numbers
lda #$80 ; screen off
sta $2100 ; brightness + screen enable register
stz $2101 ; Sprite register (size + address in VRAM)
stz $2102 ; Sprite registers (address of sprite memory [OAM])
stz $2103 ; "" ""
stz $2105 ; Mode 0, = Graphic mode register
stz $2106 ; noplanes, no mosaic, = Mosaic register
stz $2107 ; Plane 0 map VRAM location
stz $2108 ; Plane 1 map VRAM location
stz $2109 ; Plane 2 map VRAM location
stz $210A ; Plane 3 map VRAM location
stz $210B ; Plane 0+1 Tile data location
stz $210C ; Plane 2+3 Tile data location
stz $210D ; Plane 0 scroll x (first 8 bits)
stz $210D ; Plane 0 scroll x (last 3 bits) #$0 - #$07ff
stz $210E ; Plane 0 scroll y (first 8 bits)
stz $210E ; Plane 0 scroll y (last 3 bits) #$0 - #$07ff
stz $210F ; Plane 1 scroll x (first 8 bits)
stz $210F ; Plane 1 scroll x (last 3 bits) #$0 - #$07ff
stz $2110 ; Plane 1 scroll y (first 8 bits)
stz $2110 ; Plane 1 scroll y (last 3 bits) #$0 - #$07ff
stz $2111 ; Plane 2 scroll x (first 8 bits)
stz $2111 ; Plane 2 scroll x (last 3 bits) #$0 - #$07ff
stz $2112 ; Plane 2 scroll y (first 8 bits)
stz $2112 ; Plane 2 scroll y (last 3 bits) #$0 - #$07ff
stz $2113 ; Plane 3 scroll x (first 8 bits)
stz $2113 ; Plane 3 scroll x (last 3 bits) #$0 - #$07ff
stz $2114 ; Plane 3 scroll y (first 8 bits)
stz $2114 ; Plane 3 scroll y (last 3 bits) #$0 - #$07ff
lda #$80 ; increase VRAM address after writing to $2119
sta $2115 ; VRAM address increment register
stz $2116 ; VRAM address low
stz $2117 ; VRAM address high
stz $211A ; Initial Mode 7 setting register
stz $211B ; Mode 7 matrix parameter A register (low)
lda #$01
sta $211B ; Mode 7 matrix parameter A register (high)
stz $211C ; Mode 7 matrix parameter B register (low)
stz $211C ; Mode 7 matrix parameter B register (high)
stz $211D ; Mode 7 matrix parameter C register (low)
stz $211D ; Mode 7 matrix parameter C register (high)
stz $211E ; Mode 7 matrix parameter D register (low)
sta $211E ; Mode 7 matrix parameter D register (high)
stz $211F ; Mode 7 center position X register (low)
stz $211F ; Mode 7 center position X register (high)
stz $2120 ; Mode 7 center position Y register (low)
stz $2120 ; Mode 7 center position Y register (high)
stz $2121 ; Color number register ($0-ff)
stz $2123 ; BG1 & BG2 Window mask setting register
stz $2124 ; BG3 & BG4 Window mask setting register
stz $2125 ; OBJ & Color Window mask setting register
stz $2126 ; Window 1 left position register
stz $2127 ; Window 2 left position register
stz $2128 ; Window 3 left position register
stz $2129 ; Window 4 left position register
stz $212A ; BG1, BG2, BG3, BG4 Window Logic register
stz $212B ; OBJ, Color Window Logic Register (or,and,xor,xnor)
sta $212C ; Main Screen designation (planes, sprites enable)
stz $212D ; Sub Screen designation
stz $212E ; Window mask for Main Screen
stz $212F ; Window mask for Sub Screen
lda #$30
sta $2130 ; Color addition & screen addition init setting
stz $2131 ; Add/Sub sub designation for screen, sprite, color
lda #$E0
sta $2132 ; color data for addition/subtraction
stz $2133 ; Screen setting (interlace x,y/enable SFX data)
stz $4200 ; Enable V-blank, interrupt, Joypad register
lda #$FF
sta $4201 ; Programmable I/O port
stz $4202 ; Multiplicand A
stz $4203 ; Multiplier B
stz $4204 ; Multiplier C
stz $4205 ; Multiplicand C
stz $4206 ; Divisor B
stz $4207 ; Horizontal Count Timer
stz $4208 ; Horizontal Count Timer MSB (most significant bit)
stz $4209 ; Vertical Count Timer
stz $420A ; Vertical Count Timer MSB
stz $420B ; General DMA enable (bits 0-7)
stz $420C ; Horizontal DMA (HDMA) enable (bits 0-7)
stz $420D ; Access cycle designation (slow/fast rom)
start2:
sep #$20 ; A = 8, XY =16
lda #$80
sta $2100
lda #$00
sta $2105 ; Mode 0 - 2 bitplanes
lda #$01
sta $210b ; Char mem = $1000
lda #$20
sta $2107 ; Tilemem = $2000
lda #$80
sta $2115 ; Auto Increment On
; PALETTE ;----------------------------
; Since I'm using my own font, and no
; Graphic conversion tools, I'll load
; My own palette manually. 2 bits per
; pixel gives me a total of 4 colors
;--------------------------------------
; Color 0 = Background
;--------------------------------------
lda #$00
sta $2121 ; Color 0
lda #$ff
sta $2122
lda #$7f
sta $2122 ; White
lda #$00
sta $2122
sta $2122 ; Color 1 = black
lda #$10
sta $2122
lda #$07
sta $2122 ; Color 2 = green
lda #$0f
sta $2122
lda #$01
sta $2122 ; Color 3 = red
;---------------------------------------
; This Moves the data into CHAR MEMORY in
; VRAM.
ldx #$1000
stx $2116
ldx #$0000
- lda charset, x
sta $2118
lda charset2, x
sta $2119
inx
cpx #$0800
bne -
rep #$30 ; 16bit
; "Clears" VRAM with the
; "white space" character
ldx #$2000 ; Loads TILEMAP Address
stx $2116 ; Ready to be written to VRAM
ldx #$0000
lda #$0020 ; $20 is the "white space" character
- sta $2118 ; Store the character in VRAM
inx
cpx #$0800
bne -
;text
rep #$30 ; Reset processor bits
sep #$20 ; A = 8, XY = 16
lda #$00
sta $2115 ; Auto increment off
ldx #$2000 ; Load TILEMAP Address
stx $2116 ; Ready to be written to VRAM... Again ;)
ldx #$0000
- lda text, x
sta $2118 ; Load one byte of data to VRAM at a time
stz $2119
inx
cpx #$0400
bne -
;Turns the Screen on
rep #$30 ; Reset processor bits
sep #$20 ; A = 8, XY = 16
lda #$01
sta $212b ; Enable BG 1
lda #$0f
sta $2100 ; No force blank, fullbrightness
stop: ; Loop forever, the program never stops
bra stop
text:
; 32x32 - 8x8 tile screen
;"01234567890123456789012345678901" ;1
db " " ;2
db " HELLO WORLD - MAY 15, 2006 " ;3
db "--------------------------------" ;4
db " BY SPARDA " ;5
db " HEY WHATS UP NIGHTCRAWLER " ;6
db " HOW ARE YOU? CAN YOU BELIEVE " ;7
db " IT? I'VE DONE IT! IN LESS THAN " ;8
db " 3 MONTHS YES! " ;9
db "--------------------------------" ;0
db " THANKS GOES OUT TO: " ;1
db " BYUU - XKAS ALL THE WAY! " ;2
db " VERY COOL ASSEMBLER! " ;3
db " " ;4
db " NIGHTCRAWLER " ;5
db " FOR BEING SUCH GREAT HELP " ;6
db " WELL...THE ONLY HELP REALLY " ;7
db " THANK YOU SO MUCH! " ;8
db " NEVISKI " ;9
db " FOR HAVING VERY GOOD " ;0
db " COMMENTED CODE, AND FOR HIS " ;1
db " PCX2SNES PROGRAM THANKS " ;2
db "--------------------------------" ;3
db " I'VE NEVER CODED IN ASSEMBLER " ;4
db " BEFORE...... ;) " ;5
db " " ;6
db " SO WHAT DO YOU THINK GUYS " ;7
db " THANKS AGAIN NIGHTCRAWLER!!! " ;8
db " THIS WAS SO FREAKING DIFFICULT!" ;9
; Actual font data, ready to be written to VRAM
charset:
db $00,$00,$00,$00,$00,$00,$00,$00 ;'@'
db $00,$3c,$66,$7e,$66,$66,$66,$00 ;'A'
db $00,$7c,$66,$7c,$66,$66,$7c,$00 ;'B'
db $00,$3c,$66,$60,$60,$66,$3c,$00 ;'C'
db $00,$78,$6c,$66,$66,$6c,$78,$00 ;'D'
db $00,$7e,$60,$78,$60,$60,$7e,$00 ;'E'
db $00,$7e,$60,$78,$60,$60,$60,$00 ;'F'
db $00,$3c,$66,$60,$6e,$66,$3c,$00 ;'G'
db $00,$66,$66,$7e,$66,$66,$66,$00 ;'H'
db $00,$3c,$18,$18,$18,$18,$3c,$00 ;'I'
db $00,$1e,$0c,$0c,$0c,$6c,$38,$00 ;'J'
db $00,$6c,$78,$70,$78,$6c,$66,$00 ;'K'
db $00,$60,$60,$60,$60,$60,$7e,$00 ;'L'
db $00,$63,$77,$7f,$6b,$63,$63,$00 ;'M'
db $00,$66,$76,$7e,$7e,$6e,$66,$00 ;'N'
db $00,$3c,$66,$66,$66,$66,$3c,$00 ;'O'
db $00,$7c,$66,$66,$7c,$60,$60,$00 ;'P'
db $00,$3c,$66,$66,$66,$3c,$0e,$00 ;'Q'
db $00,$7c,$66,$66,$7c,$6c,$66,$00 ;'R'
db $00,$3e,$60,$3c,$06,$66,$3c,$00 ;'S'
db $00,$7e,$18,$18,$18,$18,$18,$00 ;'T'
db $00,$66,$66,$66,$66,$66,$3c,$00 ;'U'
db $00,$66,$66,$66,$66,$3c,$18,$00 ;'V'
db $00,$63,$63,$6b,$7f,$77,$63,$00 ;'W'
db $00,$66,$3c,$18,$3c,$66,$66,$00 ;'X'
db $00,$66,$66,$3c,$18,$18,$18,$00 ;'Y'
db $00,$7e,$0c,$18,$30,$60,$7e,$00 ;'Z'
db $08,$00,$00,$00,$00,$00,$00,$00 ;'['
db $00,$00,$00,$00,$00,$00,$00,$00 ;'\'
db $00,$00,$00,$00,$00,$00,$00,$00 ;']'
db $00,$00,$00,$00,$00,$00,$00,$00 ;'^'
db $00,$08,$00,$00,$00,$00,$00,$00 ;'_'
db $00,$00,$00,$00,$00,$00,$00,$00 ;' '
db $00,$7E,$7E,$3C,$18,$00,$18,$00 ;'!'
db $00,$00,$00,$00,$00,$00,$00,$00 ;'"'
db $80,$80,$80,$80,$80,$80,$80,$80 ;'#'
db $FC,$FE,$FF,$F7,$F7,$FF,$FE,$FC ;'$'
db $3E,$42,$4E,$5C,$5C,$4E,$42,$3E ;'%'
db $00,$00,$00,$00,$00,$00,$00,$01 ;'&'
db $00,$00,$00,$07,$00,$00,$00,$00 ;'''
db $00,$04,$08,$08,$08,$08,$04,$00 ;'('
db $00,$20,$10,$10,$10,$10,$20,$00 ;')'
db $08,$08,$08,$F8,$08,$08,$08,$08 ;'*'
db $10,$10,$10,$1F,$10,$10,$10,$10 ;'+'
db $10,$10,$20,$C0,$00,$00,$00,$00 ;','
db $00,$00,$00,$FF,$00,$00,$00,$00 ;'-'
db $00,$00,$00,$00,$00,$18,$18,$00 ;'.'
db $00,$00,$00,$FF,$80,$80,$80,$80 ;'/'
db $00,$3c,$66,$6e,$76,$66,$3c,$00 ;'0'
db $00,$18,$38,$18,$18,$18,$7e,$00 ;'1'
db $00,$7c,$06,$0c,$30,$60,$7e,$00 ;'2'
db $00,$7e,$06,$1c,$06,$66,$3c,$00 ;'3'
db $00,$0e,$1e,$36,$7f,$06,$06,$00 ;'4'
db $00,$7e,$60,$7c,$06,$66,$3c,$00 ;'5'
db $00,$3e,$60,$7c,$66,$66,$3c,$00 ;'6'
db $00,$7e,$06,$0c,$0c,$0c,$0c,$00 ;'7'
db $00,$3c,$66,$3c,$66,$66,$3c,$00 ;'8'
db $00,$3c,$66,$3e,$06,$66,$3c,$00 ;'9'
db $00,$00,$00,$03,$04,$08,$08,$08 ;':'
db $00,$80,$80,$F0,$80,$80,$00,$00 ;';'
db $80,$80,$80,$FF,$00,$00,$00,$00 ;'<'
db $00,$00,$00,$C0,$20,$10,$10,$10 ;'='
db $08,$08,$04,$03,$00,$00,$00,$00 ;'>'
db $00,$00,$00,$00,$00,$00,$00,$00 ;'?'
charset2:
db $00,$3C,$4E,$5E,$5E,$40,$3C,$00 ;'@'
db $00,$3c,$66,$7e,$66,$66,$66,$00 ;'A'
db $00,$7c,$66,$7c,$66,$66,$7c,$00 ;'B'
db $00,$3c,$66,$60,$60,$66,$3c,$00 ;'C'
db $00,$78,$6c,$66,$66,$6c,$78,$00 ;'D'
db $00,$7e,$60,$78,$60,$60,$7e,$00 ;'E'
db $00,$7e,$60,$78,$60,$60,$60,$00 ;'F'
db $00,$3c,$66,$60,$6e,$66,$3c,$00 ;'G'
db $00,$66,$66,$7e,$66,$66,$66,$00 ;'H'
db $00,$3c,$18,$18,$18,$18,$3c,$00 ;'I'
db $00,$1e,$0c,$0c,$0c,$6c,$38,$00 ;'J'
db $00,$6c,$78,$70,$78,$6c,$66,$00 ;'K'
db $00,$60,$60,$60,$60,$60,$7e,$00 ;'L'
db $00,$63,$77,$7f,$6b,$63,$63,$00 ;'M'
db $00,$66,$76,$7e,$7e,$6e,$66,$00 ;'N'
db $00,$3c,$66,$66,$66,$66,$3c,$00 ;'O'
db $00,$7c,$66,$66,$7c,$60,$60,$00 ;'P'
db $00,$3c,$66,$66,$66,$3c,$0e,$00 ;'Q'
db $00,$7c,$66,$66,$7c,$6c,$66,$00 ;'R'
db $00,$3e,$60,$3c,$06,$66,$3c,$00 ;'S'
db $00,$7e,$18,$18,$18,$18,$18,$00 ;'T'
db $00,$66,$66,$66,$66,$66,$3c,$00 ;'U'
db $00,$66,$66,$66,$66,$3c,$18,$00 ;'V'
db $00,$63,$63,$6b,$7f,$77,$63,$00 ;'W'
db $00,$66,$3c,$18,$3c,$66,$66,$00 ;'X'
db $00,$66,$66,$3c,$18,$18,$18,$00 ;'Y'
db $00,$7e,$0c,$18,$30,$60,$7e,$00 ;'Z'
db $00,$00,$00,$00,$00,$00,$00,$00 ;'['
db $09,$09,$00,$00,$00,$00,$00,$00 ;'\'
db $00,$00,$00,$00,$00,$00,$00,$00 ;']'
db $00,$00,$00,$00,$00,$00,$00,$00 ;'^'
db $00,$08,$00,$00,$00,$00,$00,$00 ;'_'
db $00,$00,$00,$00,$00,$00,$00,$00 ;' '
db $00,$7E,$7E,$3C,$18,$00,$18,$00 ;'!'
db $00,$00,$00,$00,$00,$00,$00,$00 ;'"'
db $80,$80,$80,$80,$80,$80,$80,$80 ;'#'
db $FC,$FE,$FF,$F7,$F7,$FF,$FE,$FC ;'$'
db $3E,$42,$4E,$5C,$5C,$4E,$42,$3E ;'%'
db $00,$00,$00,$00,$00,$00,$00,$01 ;'&'
db $00,$00,$00,$07,$00,$00,$00,$00 ;'''
db $00,$04,$08,$08,$08,$08,$04,$00 ;'('
db $00,$20,$10,$10,$10,$10,$20,$00 ;')'
db $08,$08,$08,$F8,$08,$08,$08,$08 ;'*'
db $10,$10,$10,$1F,$10,$10,$10,$10 ;'+'
db $10,$10,$20,$C0,$00,$00,$00,$00 ;','
db $00,$00,$00,$FF,$00,$00,$00,$00 ;'-'
db $00,$00,$00,$00,$00,$18,$18,$00 ;'.'
db $00,$00,$00,$FF,$80,$80,$80,$80 ;'/'
db $00,$3c,$66,$6e,$76,$66,$3c,$00 ;'0'
db $00,$18,$38,$18,$18,$18,$7e,$00 ;'1'
db $00,$7c,$06,$0c,$30,$60,$7e,$00 ;'2'
db $00,$7e,$06,$1c,$06,$66,$3c,$00 ;'3'
db $00,$0e,$1e,$36,$7f,$06,$06,$00 ;'4'
db $00,$7e,$60,$7c,$06,$66,$3c,$00 ;'5'
db $00,$3e,$60,$7c,$66,$66,$3c,$00 ;'6'
db $00,$7e,$06,$0c,$0c,$0c,$0c,$00 ;'7'
db $00,$3c,$66,$3c,$66,$66,$3c,$00 ;'8'
db $00,$3c,$66,$3e,$06,$66,$3c,$00 ;'9'
db $00,$00,$00,$03,$04,$08,$08,$08 ;':'
db $00,$80,$80,$F0,$80,$80,$00,$00 ;';'
db $80,$80,$80,$FF,$00,$00,$00,$00 ;'<'
db $00,$00,$00,$C0,$20,$10,$10,$10 ;'='
db $08,$08,$04,$03,$00,$00,$00,$00 ;'>'
db $00,$00,$00,$00,$00,$00,$00,$00 ;'?'